zz_

src/median.js

zzmq.dev@gmail.com[dev1]/mathkit[add-lcm-b-function-returns-least-common] / src / median.js @ d7306102 Download
Ladder Summary
  • file Implements a median(numbers) function that validates the input array, ensures all elements are finite numbers, sorts a copy of the array, and returns the median value (or the average of the two middle values for even‑length arrays), returning undefined for invalid or empty inputs.
/**
 * Returns the median of an array of numbers.
 *
 * @param {number[]} numbers - Array of numbers to evaluate.
 * @returns {number|undefined} The median value, or undefined for invalid inputs or empty array.
 */
export function median(numbers) {
  // Validate that the input is an array
  if (!Array.isArray(numbers)) return undefined;
  const len = numbers.length;
  if (len === 0) return undefined;

  // Ensure every element is a finite number
  for (const n of numbers) {
    if (typeof n !== "number" || !Number.isFinite(n)) return undefined;
  }

  // Create a sorted copy (ascending)
  const sorted = [...numbers].sort((a, b) => a - b);

  const middle = Math.floor(len / 2);
  if (len % 2 === 1) {
    // Odd length – return the middle element
    return sorted[middle];
  } else {
    // Even length – return the average of the two middle elements
    return (sorted[middle - 1] + sorted[middle]) / 2;
  }
}